package com.gscitysfy.cus.drain.modules.pipe.service.impl;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gscitysfy.cus.drain.config.BusinessException;
import com.gscitysfy.cus.drain.constants.DistrictConverter;
import com.gscitysfy.cus.drain.modules.common.service.IFileService;
import com.gscitysfy.cus.drain.modules.pipe.entity.DrainPipeHiddenDangerRectify;
import com.gscitysfy.cus.drain.modules.pipe.mapper.DrainPipeHiddenDangerRectifyMapper;
import com.gscitysfy.cus.drain.modules.pipe.service.IDrainPipeHiddenDangerRectifyService;
import com.gscitysfy.cus.drain.modules.pipe.service.IDrainPipeHiddenDangerRequisitionService;
import com.gscitysfy.cus.drain.modules.pipe.vo.HiddenDangerRectifyDetailVo;
import com.gscitysfy.cus.drain.modules.pipe.vo.HiddenDangerRectifyFeedbackVo;
import com.gscitysfy.cus.drain.modules.pipe.vo.HiddenDangerRectifyQueryVo;
import com.gscitysfy.cus.drain.modules.pipe.vo.HiddenDangerRequisitionVo;
import com.gscitysfy.cus.drain.utils.DateUtil;
import groovy.lang.Lazy;
import jodd.util.StringUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.http.util.Asserts;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.transaction.Transactional;
import java.util.Objects;

/**
 * <p>
 * 隐患整改 服务实现类
 * </p>
 *
 * @author Axi
 * @since 2022-11-16 12:06:33
 */
@Service
public class DrainPipeHiddenDangerRectifyServiceImpl extends ServiceImpl<DrainPipeHiddenDangerRectifyMapper, DrainPipeHiddenDangerRectify> implements IDrainPipeHiddenDangerRectifyService {

    @Resource
    DrainPipeHiddenDangerRectifyMapper rectifyMapper;

    @Resource
    private IFileService fileService;

    @Resource
    @Lazy
    IDrainPipeHiddenDangerRequisitionService requisitionService;

    /**
     * 整改状态（0待整改1整改中2已整改）
     */
    public static final String HIDDEN_DANGER_RECTIFY_STATE_RECTIFING = "1";


    @Override
    public IPage<DrainPipeHiddenDangerRectify> getPageList(HiddenDangerRectifyQueryVo queryVo) {
        IPage<DrainPipeHiddenDangerRectify> page = rectifyMapper.getPageList(new Page<>(queryVo.getCurrent(), queryVo.getSize()), queryVo);
        if (CollectionUtils.isNotEmpty(page.getRecords())) {
            page.getRecords().forEach(item -> {
                if (!Objects.isNull(item.getCmRegflag())) {
                    item.setCmRegflagDesc(DistrictConverter.getDistrictName(String.valueOf(item.getCmRegflag())));
                }
            });
        }
        return page;
    }

    @Override
    @Transactional(rollbackOn = Exception.class)
    public Boolean feedback(HiddenDangerRectifyFeedbackVo feedbackVo) {
        Asserts.notNull(feedbackVo.getCmKid(), "cmKid");
        DrainPipeHiddenDangerRectify rectify = this.getById(feedbackVo.getCmKid());
        if (Objects.isNull(rectify)) {
            throw new BusinessException("整改信息不存在!");
        }
        DrainPipeHiddenDangerRectify updateVo = new HiddenDangerRectifyFeedbackVo();
        BeanUtils.copyProperties(feedbackVo, updateVo);
        //反馈时间
        updateVo.setFeedbackTime(DateUtil.getDate());
        updateVo.setRectifyState(HIDDEN_DANGER_RECTIFY_STATE_RECTIFING);
        return this.updateById(updateVo);
    }

    @Override
    public HiddenDangerRectifyDetailVo detailById(Long id) {
        Asserts.notNull(id, "cmkid");
        DrainPipeHiddenDangerRectify rectify = this.getById(id);
        HiddenDangerRectifyDetailVo rectifyDetailVo = new HiddenDangerRectifyDetailVo();
        BeanUtils.copyProperties(rectify, rectifyDetailVo);
        if (!Objects.isNull(rectifyDetailVo.getCmRegflag())) {
            rectifyDetailVo.setCmRegflagDesc(DistrictConverter.getDistrictName(String.valueOf(rectifyDetailVo.getCmRegflag())));
        }
        HiddenDangerRequisitionVo requisitionVo = requisitionService.detailById(rectify.getRequisitionId());
        if (Objects.nonNull(requisitionVo)) {
            if (!Objects.isNull(requisitionVo.getCmRegflag())) {
                requisitionVo.setCmRegflagDesc(DistrictConverter.getDistrictName(String.valueOf(requisitionVo.getCmRegflag())));
            }
            rectifyDetailVo.setRequisition(requisitionVo);
        }
        //附件详情
        if (StringUtil.isNotBlank(rectify.getAttachment())) {
            rectifyDetailVo.setFiles(fileService.getFileListByIds(rectify.getAttachment()));
        }
        return rectifyDetailVo;
    }
}
